package Offer11;

/**
 * 盛最多水的容器
 * 给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点(i,ai) 。
 * 在坐标内画 n 条垂直线，垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。
 * 找出其中的两条线，使得它们与x轴共同构成的容器可以容纳最多的水。
 * @author 23737
 * @time 2021.10.29
 */
public class Test_11 {
    public static void main(String[] args) {
        int[] a = new int[]{1,8,6,2,5,4,8,3,7};
        int[] b = new int[]{4,3,2,1,4};
        System.out.println(new Solution_11().maxArea(a));
        System.out.println(new Solution_11Two().maxArea(b));
    }
}

/**
 * 个人解法。思路什么都是对的，运行结果也是对的
 * 但是超时了
 */
class Solution_11 {
    public int maxArea(int[] height) {
        if (height.length == 0) {
            return 0;
        }
        int maxArea = 0;
        for (int i = 0; i < height.length; i++) {
            for (int j = height.length-1; j > i; j--) {
                int min = Math.min(height[i],height[j]);
                maxArea = Math.max(min*(j-i),maxArea);
            }
        }
        return maxArea;
    }
}

/**
 * 双指针解法（不超时）
 */
class Solution_11Two{
    /**
     * 个人解法，效率较低
     * @param height
     * @return
     */
    public int maxArea(int[] height) {
        if (height.length == 0) {
            return 0;
        }
        if(height.length == 2 && (height[0] == height[1])){
            return height[0]*1;
        }
        int maxArea = 0;
        int left = 0;
        int right = height.length-1;
        while(left<right){
            int min = Math.min(height[left],height[right]);
            maxArea = Math.max(min*(right-left),maxArea);
            if (height[left]<= height[right]){
                left++;
            }else {
                right--;
            }
        }
        return maxArea;
    }

    /**
     * 大佬双指针
     * @param height
     * @return
     */
    public int maxArea2(int[] height) {
        int i = 0, j = height.length - 1, res = 0;
        while(i < j) {
            res = height[i] < height[j] ?
                    Math.max(res, (j - i) * height[i++]):
                    Math.max(res, (j - i) * height[j--]);
        }
        return res;
    }
}


